Session key invalid or no longer valid |
2009/06/11 ~ 阿亮 ~ |
在實做 facebook AP 時,由於一些 AJAX 的話,用 iframe 來做,比較方便,但在於 iframe 要去調 Server 端時,若又要用 facebook api 來調用相關使用者時,會有 Session 不符合的問題。
即會有 "Session key invalid or no longer valid" 的訊息。
用 facebook 去調用 Iframe 的程式,facebook 端會丟 $_POST[‘fb_sig_session_key’] 來做簡單的驗證機制,一般如下述所列的做法。
if (isset($_REQUEST['fb_sig_session_key'])) { $_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key']; } if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];
但這段會有上述的錯誤情形。
根據此頁的做法 ,要用下述的做法
$iframeSessionKeyName = $CONFIG['facebook']['apiKey'] . '_session_key'; if (isset($_REQUEST[$iframeSessionKeyName])) { $_SESSION['fb_sig_session_key'] = $_REQUEST[$iframeSessionKeyName]; } else if (isset($_REQUEST['fb_sig_session_key'])) { $_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key']; } if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];
真是找好久的解法啊
◎後來還是有時會遇到 session key invalid 的問題,可以試試下述方法,即在於 getInfo 遇到 exception 時,將 session 清除,重新 login.
try { $userLocale = $facebook->api_client->users_getInfo($fb_sig_user, 'locale'); } catch (Exception $e) { // $facebook->expire_session(); $facebook->set_user(null, null); $facebook->redirect($facebook->get_login_url(null,'')); }
雖然,有的文章說要用 expire_session 的方法,但此 method 還是會讀 session 而無效。
請問這段程式應該放在哪裡?
該放在被呼叫的ajax 的php裡面
還是在原本的程式中
是否可以再講詳細一點?感謝
這些都是 PHP 的程式碼
不好意思 我也跟您遇到一樣問題 用google找解法 找到您的這個網站 我該試的方法都試過了 換電腦 換瀏覽器 換密碼 刪cookie等等等 基本上都試過了 還有刪好友名單 所以想問一下 您上述的方法要怎麼試? 可以幫我翻譯成白話文嗎 謝謝
基本上,這裡講的 Session 屬於 Server 端的問題,不是 Client 端的問題。